package com.gitee.huxing.algorithmic.daily;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description: 字母大小写全排列
 * 给定一个字符串 s ，通过将字符串 s 中的每个字母转变大小写，我们可以获得一个新的字符串。
 * 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。
 * @ProjectName: algorithmic-pactice
 * @Package: LetterCasePermutation
 * @ClassName: LetterCasePermutation
 * @Author: huxingmale
 * @DateTime: 2022-05-20 9:57
 */
public class LetterCasePermutation {

    public static void main(String[] args) {
        LetterCasePermutation permutation = new LetterCasePermutation();
        permutation.letterCasePermutation("a1b1").forEach(System.out::println);
    }

    public List<String> letterCasePermutation(String s) {
        List<StringBuilder> ans = new ArrayList();
        ans.add(new StringBuilder());
        for (char chr : s.toCharArray()){
            int n = ans.size();
            if (Character.isLetter(chr)){
                for (int i = 0; i < n; i++){
                    ans.add(new StringBuilder(ans.get(i)));
                    ans.get(i).append(Character.toLowerCase(chr));
                    ans.get(n + i).append(Character.toUpperCase(chr));
                }
            } else {
                for (int i = 0; i < n; ++i){
                    ans.get(i).append(chr);
                }
            }
        }
        List<String> finalans = new ArrayList();
        for (StringBuilder builder: ans){
            finalans.add(builder.toString());
        }
        return finalans;
    }
}
